﻿using FaceWebServer.Interface;
using FaceWebServer.Utility.VerifyAttribute;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace FC8280TServer.Controllers.FaceDevice
{
    /// <summary>
    /// 设备的参数
    /// </summary>
    public class DeviceBaseParameter
    {

        /// <summary>
        /// 设备 SN
        /// </summary>
        [VerifyText(iMax: 16, iMin: 16, required: true,
            errCode: 1, sErrorDesc: "设备SN由16个字符组成")]
        public string DeviceID { get; set; }  // 是

        /// <summary>
        /// 设备名称
        /// </summary>
        [VerifyText(iMax: 30, iMin: 1, required: true,
                    errCode: 2, sErrorDesc: "设备名称由1-30个字符组成")]
        public string DeviceName { get; set; }  // 是

        /// <summary>
        /// 音量大小(范围 0-84)  
        /// </summary>
        [VerifyNum(iMax: 84, iMin: 0,
                    errCode: 3, sErrorDesc: "音量超出范围(范围 0-84)")]
        public int ParameterVolume { get; set; }  // 是
        /// <summary>
        /// 活体检测,1 打开，0 关闭
        /// </summary>
        [VerifyNumRange(iRange: new int[] { 1, 0 },
                    errCode: 4, sErrorDesc: "活体检测的取值选项仅为：0 关闭；1 打开。")]
        public int ParameterPreview { get; set; }  // 是

        /*
        /// <summary>
        /// 多人脸检测值
        /// </summary>
        [VerifyNumRange(iRange: new int[] { 1, 0 },
                    errCode: 5, sErrorDesc: "多人脸检测值(0 关闭；1 打开。)")]
        public int ParameterMoreFace { get; set; }  // 是
        */

        /// <summary>
        /// 设备保活包间隔（以秒为单位）
        /// </summary>
        [VerifyNum(iMax: 7200, iMin: 5,
                    errCode: 6, sErrorDesc: "设备保活包间隔（秒）：5-7200。")]
        public int ParameterPolling { get; set; }  // 是

        /// <summary>
        /// 白补光灯亮灭时间
        /// </summary>
        [VerifyNum(iMax: 65535, iMin: 0,
                    errCode: 7, sErrorDesc: "白补光灯亮灭时间（秒）：0-65535。")]
        public int ParameterLightTimeout { get; set; }  // 是

        /// <summary>
        /// 补光灯开关：0:关闭，1：打开(补光灯打开才能设置自动补光)
        /// </summary>
        [VerifyNumRange(iRange: new int[] { 1, 0 },
                    errCode: 8, sErrorDesc: "补光灯开关取值范围(0 关闭；1 打开。)")]
        public int ParameterLightSwitch { get; set; }  // 是

        /// <summary>
        /// 自动补光：0:关闭，1：打开
        /// </summary>
        [VerifyNumRange(iRange: new int[] { 1, 0 },
                    errCode: 9, sErrorDesc: "自动补光灯开关,超出范围:0 关闭；1 打开")]
        public int ParameterLightActive { get; set; }  // 是

        /// <summary>
        /// 人脸识别阈值
        /// </summary>
        [VerifyFloat(iMax: 99, iMin: 1,
                    errCode: 10, sErrorDesc: "人脸识别阈值,超出范围：1-99。")]
        public float ParameterFaceThreshold { get; set; }  // 是

        /// <summary>
        /// 温度比对阈值（最大值）
        /// </summary>
        [VerifyFloat(iMax: 100, iMin: 0,
                    errCode: 10, sErrorDesc: "温度比对阈值（最大值）,超出范围：0-100。")]
        public float ParameterTempThresholdMax { get; set; }  // 是

        /// <summary>
        /// 温度比对阈值（最小值
        /// </summary>
        [VerifyFloat(iMax: 100, iMin: 0,
                    errCode: 10, sErrorDesc: "温度比对阈值（最小值）,超出范围：0-100。")]
        public float ParameterTempThresholdMin { get; set; }  // 是

        /// <summary>
        /// 体温筛选，0 关闭，1 打开
        /// </summary>
        [VerifyNumRange(iRange: new int[] { 1, 0 },
                    errCode: 11, sErrorDesc: "体温筛选,超出范围:0 关闭；1 打开")]
        public int ParameterTempPattern { get; set; }  // 是
        /*
        /// <summary>
        /// 同步系统时间（时间戳，比如：1584427174 对应是2020-03-17 14:39:34）
        /// </summary>
        [VerifyLong(iMax: 32503616624L, iMin: 0L,
                            errCode: 12, sErrorDesc: "同步系统时间戳超出范围")]
        public long ParameterSystemTime { get; set; }  // 是
        */
        /// <summary>
        /// 保存陌生人打卡记录，0:关闭，1:开启
        /// </summary>
        [VerifyNumRange(iRange: new int[] { 1, 0 },
                            errCode: 13, sErrorDesc: "保存陌生人打卡记录，超出范围:0:关闭，1:打开")]
        public int ParameterSaveExternalvisitors { get; set; }  // 是

        /// <summary>
        /// 口罩检测开关：1：打开，0：关闭
        /// </summary>
        [VerifyNumRange(iRange: new int[] { 1, 0 },
                       errCode: 14, sErrorDesc: "口罩检测开关，超出范围:0:关闭，1:打开")]
        public int ParameterMask { get; set; }  // 是

        /// <summary>
        /// 0~1000,温度补偿值
        /// </summary>
        [VerifyNum(iMax: 1000, iMin: 0,
                    errCode: 15, sErrorDesc: "温度补偿值,超出范围：0-10。")]
        public int ParameterCompensate { get; set; }  // 是 

        /// <summary>
        /// 菜单密码
        /// </summary>
        [VerifyNumText(iMax: 8, iMin: 4, required: false,
                    errCode: 16, sErrorDesc: "菜单密码由4-8个数字组成")]
        public string ParameterLoginPassword { get; set; }  // 是
        /*
        /// <summary>
        /// 有线网络开关，1:打开，0:关闭
        /// </summary>
        [VerifyNumRange(iRange: new int[] { 1, 0 },
                       errCode: 17, sErrorDesc: "有线网络开关，超出范围:0:关闭，1:打开")]
        public int ParameterNetworkSwitch { get; set; }  // 是

        /// <summary>
        /// 有线网络自动 ip，1:开，0:关
        /// </summary>
        [VerifyNumRange(iRange: new int[] { 1, 0 },
                       errCode: 18, sErrorDesc: "有线网络自动获得IP(DHCP)开关，超出范围:0:关闭，1:打开")]
        public int ParameterNetworkIpActive { get; set; }  // 是

        /// <summary>
        /// 有线网络 Ip 地址(“//192.168.0.110”)
        /// </summary>
        [VerifyIP(errCode: 19, sErrorDesc: "有线网络 Ip 地址格式错误")]
        public string ParameterNetworkIpUrl { get; set; }  // 是

        /// <summary>
        /// 有线网络子网掩码(“//255.255.255.0”)
        /// </summary>
        [VerifyIP(errCode: 20, sErrorDesc: "有线网络子网掩码格式错误")]
        public string ParameterNetworkSubnetMask { get; set; }  // 是

        /// <summary>
        /// 有线网络网关(“//192.168.0.1”)
        /// </summary>
        [VerifyIP(errCode: 21, sErrorDesc: "有线网络网关格式错误")]
        public string ParameterNetworkGteway { get; set; }  // 是


        /// <summary>
        /// Dns(“//192.168.0.1”)
        /// </summary>
        [VerifyIP(errCode: 22, sErrorDesc: "DNS格式错误")]
        public string ParameterNetworkDns { get; set; }  // 是


        /// <summary>
        /// 无线网开关，1:开，0:关
        /// </summary>
        [VerifyNumRange(iRange: new int[] { 1, 0 },
                       errCode: 23, sErrorDesc: "无线网开关，超出范围:0:关闭，1:打开")]
        public int ParameterWifiSwitch { get; set; }  // 是


        /// <summary>
        /// 无线网账号
        /// </summary>
        [VerifyText(iMax: 60, iMin: 1, required: false,
                    errCode: 24, sErrorDesc: "无线网账号由1-60个字符组成")]
        public string ParameterWifiName { get; set; }  // 是

        /// <summary>
        /// 无线网密码
        /// </summary>
        [VerifyText(iMax: 60, iMin: 1, required: false,
                    errCode: 25, sErrorDesc: "无线网密码由1-60个字符组成")]
        public string ParameterWifiPassWord { get; set; }  // 是

        /// <summary>
        /// 无线热点开关,1:开，0:关
        /// </summary>
        [VerifyNumRange(iRange: new int[] { 1, 0 },
                       errCode: 26, sErrorDesc: "无线热点开关，超出范围:0:关闭，1:打开")]
        public int ParameterHotspotSwitch { get; set; }

        /// <summary>
        /// 无线热点名称
        /// </summary>
        [VerifyText(iMax: 60, iMin: 1, required: false,
                       errCode: 27, sErrorDesc: "无线热点名称由1-60个字符组成")]
        public string ParameterHotspotName { get; set; }

        /// <summary>
        /// 热点密码
        /// </summary>
        [VerifyText(iMax: 60, iMin: 1, required: false,
                       errCode: 28, sErrorDesc: "无线热点密码由1-60个字符组成")]
        public string ParameterHotspotPassword { get; set; }
        */
        /// <summary>
        /// 华氏温度显示开启开关,1:开，0:关
        /// </summary>
        [VerifyNumRange(iRange: new int[] { 1, 0 },
                       errCode: 29, sErrorDesc: "华氏温度显示开启开关，超出范围:0:关闭，1:打开")]
        public int ParameterFahrenheitSwitch { get; set; }  // 是

        /// <summary>
        /// 测温模块 海曼模组 DBHC 参数，范围 200-400
        /// </summary>
        [VerifyNum(iMax: 400, iMin: 200,
                    errCode: 30, sErrorDesc: "海曼模组 DBHC 参数,超出范围：200-400。")]
        public int ParameterBdhc { get; set; }  // 否

        /// <summary>
        /// 测温模块 海曼模组 DBLC 参数，范围 200-400
        /// </summary>
        [VerifyNum(iMax: 400, iMin: 200,
                    errCode: 31, sErrorDesc: "海曼模组 DBLC 参数,超出范围：200-400。")]
        public int ParameterBdlc { get; set; }  // 否

        /// <summary>
        /// 测温模块 海曼模组测温中心点坐标参数，限制 4 位数、必须都是数字（如 0918、1616）
        /// </summary>
        [VerifyNumText(iMax: 4, iMin: 4, required: true,
                    errCode: 32, sErrorDesc: "海曼模组测温中心点坐标参数，限制 4 位数、必须都是数字（如 0918、1616）")]
        public string ParameterCent { get; set; }  // 否

        /// <summary>
        /// 保存现场图片 0，不保存；1，保存
        /// </summary>
        [VerifyNumRange(iRange: new int[] { 1, 0 },
                       errCode: 33, sErrorDesc: "保存现场图片，超出范围:0:关闭，1:打开")]
        public int ParameterSavePicture { get; set; }  // 是

        /// <summary>
        /// 出入类型 0,入门；1，出门
        /// </summary>
        [VerifyNumRange(iRange: new int[] { 1, 0 },
                       errCode: 34, sErrorDesc: "出入类型，超出范围: 0,入门；1，出门")]
        public int ParameterAccessType { get; set; }  // 是

        /// <summary>
        /// WG输出格式 26 / 34
        /// </summary>
        [VerifyNumRange(iRange: new int[] { 26, 34 },
                       errCode: 35, sErrorDesc: "WG输出格式，超出范围: 26 或 34")]
        public int ParameterWgFormat { get; set; }  // 是

        /// <summary>
        /// 开门保持时间 0-65535（s）
        /// </summary>
        [VerifyNum(iMax: 65535, iMin: 0,
                       errCode: 36, sErrorDesc: "开门保持时间，超出范围: 0-65535（s）")]
        public int ParameterKeepOpenDoor { get; set; }  // 是

        /// <summary>
        /// 免验证开门 1--启用；0--禁用
        /// </summary>
        [VerifyNumRange(iRange: new int[] { 0, 1 },
                       errCode: 37, sErrorDesc: "免验证开门，超出范围:1--启用；0--禁用")]
        public int ParameterLaissezSwitch { get; set; }  // 是

        /// <summary>
        /// 识别间隔 0--禁用 ; 1-65535（s）
        /// </summary>
        [VerifyNum(iMax: 65535, iMin: 0,
                       errCode: 38, sErrorDesc: "识别间隔，超出范围: 0--禁用 ; 1-65535（s）")]
        public int ParameterRecgInterval { get; set; }  // 是

        /// <summary>
        /// 验证间隔，重复记录存储设置 0,关闭；1，打开
        /// </summary>
        [VerifyNumRange(iRange: new int[] { 0, 1 },
                       errCode: 39, sErrorDesc: "验证间隔，重复记录存储设置，超出范围:0,关闭；1，打开")]
        public int ParameterIntervalRecoSwitch { get; set; }  // 是

        /// <summary>
        /// 门磁类型	0，常闭；1，常开；2，无
        /// </summary>
        [VerifyNumRange(iRange: new int[] { 0, 1, 2 },
                       errCode: 40, sErrorDesc: "门磁类型，超出范围:0，常闭；1，常开；2，无")]
        public int ParameterDoorSensor { get; set; }  // 是

        /// <summary>
        /// 开门超时时间，门打开超过这个时间就报警	5-255（s）
        /// </summary>
        [VerifyNum(iMax: 255, iMin: 5,
                       errCode: 41, sErrorDesc: "开门超时时间，超出范围: 5-255（s）")]
        public int ParameterDoorSensorDelay { get; set; }  // 是

        /// <summary>
        /// 门磁报警，0，关闭；1，开启
        /// </summary>
        [VerifyNumRange(iRange: new int[] { 0, 1 },
                       errCode: 42, sErrorDesc: "门磁报警，超出范围:0，关闭；1，开启")]
        public int ParameterDoorAlarmSwitch { get; set; }  // 是

        /// <summary>
        /// 口罩阈值
        /// </summary>
        [VerifyNum(iMax: 99, iMin: 1,
                       errCode: 43, sErrorDesc: "口罩阈值，超出范围: 1-99")]
        public int ParameterMaskThreshold { get; set; }  // 是

        /// <summary>
        /// 主界面设置--公司名称
        /// </summary>
        [VerifyText(iMax: 20, iMin: 0,required:false,
                       errCode: 44, sErrorDesc: "公司名称，长度过长，不可超过20个字符")]
        public string ParameterCompanyName { get; set; }  // 是

        /// <summary>
        /// 语音模式 0,不播报；1，播放名字; 2,播放问候语;3,播放名字和问候语
        /// </summary>
        [VerifyNumRange(iRange: new int[] { 0, 1,2,3 },
                       errCode: 45, sErrorDesc: "语音模式，超出范围:0,不播报；1，播放名字; 2,播放问候语;3,播放名字和问候语")]
        public int ParameterVoiceMode { get; set; }  // 是

        /// <summary>
        /// 问候语 0，请通行;1,欢迎光临;2，时间问候语
        /// </summary>
        [VerifyNumRange(iRange: new int[] { 0, 1, 2, 3 },
                       errCode: 46, sErrorDesc: "问候语，超出范围:0，请通行;1,欢迎光临;2，时间问候语")]
        public int ParameterGrettings { get; set; }  // 是

        /// <summary>
        /// 陌生人语音 0，不播报;1,播报假体;2，播报陌生人；3，播报假体和陌生人
        /// </summary>
        [VerifyNumRange(iRange: new int[] { 0, 1, 2, 3 },
                       errCode: 47, sErrorDesc: "陌生人语音，超出范围:0，不播报;1,播报假体;2，播报陌生人；3，播报假体和陌生人")]
        public int ParameterStrangerVoice { get; set; }  // 是

        /// <summary>
        /// 亮度设置 1-10
        /// </summary>
        [VerifyNum(iMax: 10, iMin: 1,
                      errCode: 48, sErrorDesc: "亮度设置，超出范围: 1-10")]
        public int ParameterBrightness { get; set; }  // 是

        /// <summary>
        /// 语言选择 0，中文；1，英文；2，繁体
        /// </summary>
        [VerifyNumRange(iRange: new int[] { 0, 1, 2 },
                       errCode: 49, sErrorDesc: "UI界面语言，超出范围:0，中文；1，英文；2，繁体")]
        public int ParameterLanguageChoose { get; set; }  // 是

        /// <summary>
        /// 识别距离 50-150（cm）
        /// </summary>
        [VerifyNum(iMax: 150, iMin: 50,
                      errCode: 50, sErrorDesc: "识别距离，超出范围: 50-150")]
        public int ParameterDistance { get; set; }  // 是

        /// <summary>
        /// 服务器地址
        /// </summary>
        [VerifyText(iMax: 100, iMin: 0, required: true,
                       errCode: 51, sErrorDesc: "服务器地址验证失败，必填，不可超过100个字符")]
        public string ParameterCloudserverAddress { get; set; }  // 是

        /// <summary>
        /// 序列号
        /// </summary>
        [VerifyText(iMax: 16, iMin: 16, required: true,
            errCode: 52, sErrorDesc: "设备新的SN由16个字符组成")]
        public string ParameterSerialNum { get; set; }  // 是

        /// <summary>
        /// 制造商
        /// </summary>
        [VerifyText(iMax: 50, iMin: 0, required: false,
                       errCode: 53, sErrorDesc: "制造商，长度过长，不可超过50个字符")]
        public string ParameterManufacturer { get; set; }  // 是

        /// <summary>
        /// 网址
        /// </summary>
        [VerifyText(iMax: 50, iMin: 0, required: false,
                       errCode: 54, sErrorDesc: "制造商网址，长度过长，不可超过50个字符")]
        public string ParameterWebsite { get; set; }  // 是

        /// <summary>
        /// 生产日期
        /// </summary>
        [VerifyText(iMax: 50, iMin: 0, required: false,
               errCode: 55, sErrorDesc: "生产日期，格式不正确")]
        public string ParameterProductionDate { get; set; }  // 是

    }
}
